/**
 * @chatset utf-8
 * atearsan/2013-10-25
 * osc: http://my.oschina.net/atearsan
 *
 * 黑名单过滤
 *
 * todolist
 *    //1. 屏蔽列表可配置(硬编码)
 *    1.1 添加右键菜单
 *  //2. 屏蔽页面可配置(硬编码)
 *  //3. 加入icon
 *  //4. 最好能做到浏览器端可直接配置(pop)  [2015年 2月 2日 星期一 完成, 不是pop]
 *  5. pop可以取消屏蔽, 取消屏蔽的用户信息用红线框表示
 *  //6. 添加问答页屏蔽规则
 *  //7. 屏蔽页面的定义没必要用数组定义, 直接改成indexOf就可以的
 *  //8. 其他页面屏蔽规则逐步完善    (首页、新闻)
 *  //9. 打包成crx
 *    //10. 发布到Chrome Web Store... 不过我现在登录的时候翻不过去- -[更新WiKi: http://open.chrome.360.cn/extension_dev/autoupdate.html]
 *  //10.1 要钱... 所以我不发布 - -! 如果有人有的话 可以顺带发布 - -
 *  11. 可以查看别人@回复的内容
 *  13. 定时刷新消息通知
 *
 * 随手日记
 * >2015年11月 24日 星期二
 * 重新建一个新的项目 不单纯做用户信息屏蔽了 (终于开始动手了 这个插件的跨度时间真长啊!!!)
 *
 * >2015年11月 6日 星期五
 * 看到v2ex里有人写了可以查看别人回复的内容的插件 就给osc的动弹也加一个吧
 * 反正很多人都想要 (其实想了几天了 一直没弄)
 *
 * >2015年 2月 8日 星期日
 * 今天又看了下Markdown 重新编辑了下README.md  练练这个语法
 *
 * >2015年 2月 2日 星期一
 * 完成黑名单可以配置的逻辑
 *
 * >2015-02-01 星期天
 * 今天下午嗑了两个小时瓜子 舌头起泡了
 * 添加首页最新动弹、首页热门动弹、新闻 页面的屏蔽逻辑
 * 局(菊)部重构代码, 更改#main函数里判断是否是osc页面的逻辑
 * 修复地址栏icon不显示屏蔽数量的bug
 *
 * >2015-01-25
 *  添加问答页面屏蔽逻辑
 *
 * >2013-10-25
 *  我就是讨厌柳天赐(hjin)那厮, 发广告讨嫌. 写这玩意就是屏蔽他
 */

var $url = location.href;

// 黑名单列表(格式:http://my.oschina.net/xxx)
var $blackList = [];
function main() {
    // 加载配置信息
    chrome.storage.sync.get("osc_oscer_blacklist", function (item) {
        //console.log(item.osc_oscer_blacklist);
        if (item.osc_oscer_blacklist) {
            $blackList = item.osc_oscer_blacklist.split(";");

            // 开始执行逻辑处理
            afterLoadBlacklist();
            //console.info("#osc_blacklist_filter.js#main");
        }
    });
} // #END main

function afterLoadBlacklist() {
    if (isOsc("oschina.net")) {
        if ($url == 'http://www.oschina.net/') {
            onIndexPage();// 首页
        }
        else if ($url == 'http://www.oschina.net/tweets') {
            onMoreTweet();// 更多动弹
        }
        else if (isOsc('/news/')) {
            onNews();// 新闻
        }
        else if (isOsc('/tweet/')) {
            onTweet();// 动弹
        }
        else if (isOsc("/question/")) {
            onQuestion();// 问答页面
        }
        else if (isOsc("/code/")) {
            onCode();// 代码分享
        }
        else if (isOsc("/job/")) {
            onJob();// 招聘
        }
        // 代码分享、招聘板块就懒得写了...因为那边评论的人少啊 - -    而且, 很少有人去吐槽分享的代码
    } // #END if osc
}

function isOsc(urlKeyWord) {
    return $url.indexOf(urlKeyWord) > 0;
}

// 首页
function onIndexPage() {
    var count = 0;
    for (var i in $blackList) {
        // 最新动弹
        var elements = $('.TopTweets .user').find('a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            var ele = $(elements[j]).parent().parent();
            ele.parent().empty().remove();

            count++;
        }

        // 热门动弹
        var elements2 = $('.HotTweets .user').find('a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements2.length; j++) {
            var ele = $(elements2[j]).parent().parent();
            ele.parent().empty().remove();

            count++;
        }
    }

    sendRequest(count);
} // #END onIndexPage

// 新闻
function onNews() {
    var count = 0;
    for (var i in $blackList) {
        var elements = $('.portrait').find('a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            var ele = $(elements[j]).parentsUntil('table').parent();
            ele.parent().empty().remove();

            count++;
        }
    }

    sendRequest(count);
}

// 动弹
function onTweet() {
    var count = 0;
    for (var i in $blackList) {
        var elements = $('#TweetReplies .TweetReplyBody').find('a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            var ele = $(elements[j]).parentsUntil('table[class*="ostable"]').parent();
            ele.parent().empty().remove();

            count++;
        }
    }

    sendRequest(count);
} // #END onTweet

// 更多动弹
function onMoreTweet() {
    var count = 0;
    for (var i in $blackList) {
        // 大家都在动弹什么  && Top 10
        var elements = $('a[class*="portrait"][href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            //var ele = $(elements[j]).parent();
            $(elements[j]).parent().empty().remove();
            //ele.parent().empty().remove();

            count++;
        }
    }

    sendRequest(count);
} // #END更多动弹


// 问答
function onQuestion() {
    var count = 0;
    for (var i in $blackList) {
        var elements = $('.user_info').find('a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            var ele = $(elements[j]).parentsUntil('li[class*="Answer"]').parent();
            ele.prev().empty().remove(); // 投票 & 反对
            ele.next().empty().remove(); // 横线
            ele.empty().remove(); 		// 回答内容    (PS: 被引用回答的不会被删除 - -)

            count++;
        }

        // 回帖中的评论
        var elements = $('li[id^="PostReply"] > a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            var liSize = $(elements[j]).parent().parent().children().length;
            if (liSize == 1) {
                // 把 评论 的整个布局都删掉
                $(elements[j]).parentsUntil('div[class*="replies"]').parent().empty();//.remove();
            } else {
                // 只删除单个评论
                var ele = $(elements[j]).parent().empty().remove();
            }
            count++;
        }
    }

    sendRequest(count);
} // #END onQuestion

// 代码分享
function onCode() {
    var count = 0;
    for (var i in $blackList) {
        var elements = $('.portrait').find('a[href$="' + $blackList[i] + '"]');
        for (var j = 0; j < elements.length; j++) {
            var ele = $(elements[j]).parentsUntil('li').parent();
            ele.empty().remove();

            count++;
        }
    }

    sendRequest(count);
} // #END onCode

// 招聘
function onJob() {
    // 评论样式和代码分享的一样, 直接调用onCode
    onCode();
} // #END onJob

// 更新插件栏icon, 显示屏蔽了几个
function sendRequest(blockCount) {
    var json = {"action": "iconMsg", "blockCount": blockCount};
    //console.log(json);
    chrome.extension.sendRequest(json, function (response) {
        //console.log(response.farewell);
    });
}

main();